package gestordeentidades.persistance.database;

import java.util.ArrayList;
import java.util.Iterator;
import gestordeentidades.persistance.interfaces.IDataBaseStatement;

/**
 * Trabalho DAS - 2014/2015
 * DataBaseStatement é uma classe que implementa IDataBaseStatement
 * @author a21210380, a21190325, a21210392
 */
public class DataBaseStatement implements IDataBaseStatement {
    private final ArrayList<ParametroSql> lista = new ArrayList<>();
    private String sql = null;
    
    @Override
    public IDataBaseStatement adicionarParametroSql(int index, Object object, SQLtype targetSqlType) {
        if(index < 1) {
            throw new IllegalArgumentException("Index tem de ser maior que zero!");
        }
        if(targetSqlType == null) {
            throw new IllegalArgumentException("targetSqlType não pode ser null!");
        }
        if(object == null && targetSqlType != SQLtype.NULL) {
            throw new IllegalArgumentException("object não pode ser null!");
        }
        lista.add(new ParametroSql(index, object, targetSqlType));
        return this;
    }

    @Override
    public IDataBaseStatement setSql(String sql) {
        if(sql == null) {
            throw new IllegalArgumentException("sql não pode ser null!");
        }
        this.sql = sql;
        return this;
    }

    @Override
    public String getSql() {
        if(sql == null) {
            throw new IllegalStateException("sql nao esta inicializado!");
        }
        return sql;
    }

    @Override
    public Iterator<ParametroSql> iterator() {
        return lista.iterator();
    }
}
